package com.bjpowernode.validation.annotation;

import com.bjpowernode.validation.validator.PasswordValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.*;

/**
 * 自定义密码验证注解
 * @interface 定义注解 , 可以把注解作为一种 特殊的接口
 * @Target 注解 指定定义注解 可以修饰哪些成员(修饰范围)
 * @Retention 注解 指定当前定义注解保留的 时长
 * 标记其他注解，以指示被该元注解标记的注解应当被 javadoc 和类似的工具记录
 * @Constraint 是 Java Bean Validation (JSR 380) 中的一个元注解（meta-annotation），用于定义自定义的验证约束（constraint）。当你想要创建自己的验证逻辑并使其可重用，你可以通过定义一个自定义的注解并使用 @Constraint 来标记它。
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = PasswordValidator.class)
public @interface Password {

    //错误提示信息
    String message() default "{jakarta.validation.constraints.Size.message}";

    //required：要求的，密码是否是必须的（也就是密码不为空，true表示密码不为空，false可以为空）
    boolean required() default true;

    //密码最小长度
    int min() default 0;

    //密码最大长度
    int max() default Integer.MAX_VALUE;

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
